#pragma once

#include <QtGui>
#include <QtXml>
#include <QtSql>
#include <iostream>
#include <ctime>

using namespace std;

class SimpleEdgeElement
{
public:
    uint id,
        num_children;
//        num_desc;
};

class EdgeElement
{
public:
    uint id,            // índice na tabela
        order,          // ordem do elemento, utilizado em todas as ordens de numeração
        size,           // utilizado somente na ordem complexa
        parent_id,      // índice do pai, referencia o id
        end_desc_id,    // índice do último descendente, referencia o id
        path_id,        // índice para a tabela de caminhos
        num_children,   // número de filhos (necessário na ordem local)
        num_desc;       // número de descendentes (não utilizado
    QString value,  // valor do nodo
        label;      // rótulo do nodo, utilizado somente ao escrever o banco de dados em xml
    bool attribute; // indica se é ou não um atributo
};

static const uint MAX_INT = -1;

typedef QList< std::pair<uint,uint> > QueryList;
// (tag, índice na tabela de tags)
typedef QMap< QString, uint > PathMap;
typedef QMap<uint,EdgeElement*> EdgeMap;

inline static uint timespecToMilisecond(struct timespec& t)
{
    return t.tv_sec * 1000 + t.tv_nsec / 1000000;
}
